class HttpRequest {
  constructor(config = {}) {
    this.defaultConfig = {
      baseUrl: '',
      timeout: 60000, // 请求超时时间（毫秒）
      header: {
        'Content-Type': 'application/json'
      },
      ...config // 合并用户传入的默认配置
    };
  }

  async request(method, url, data = {}, config = {}) {
    // 合并默认配置和当前请求的自定义配置
    const mergedConfig = {
      ...this.defaultConfig,
      ...config
    };

    console.log(`发起${method}请求:`, { url, data, config: mergedConfig });
    
    // 拼接完整请求地址（支持绝对地址和相对地址）
    let fullUrl = url.startsWith('http') ? url : `${mergedConfig.baseUrl}${url}`;
    console.log('基础URL:', mergedConfig.baseUrl);
    console.log('请求URL:', url);
    console.log('完整URL:', fullUrl);

    // 构建请求配置
    let requestConfig = {
      url: fullUrl,
      method: method.toUpperCase(), // 确保请求方法为大写（如 GET/POST）
      timeout: mergedConfig.timeout,
      header: {
        ...mergedConfig.header, // 继承默认请求头
        ...(config.header || {}) // 合并当前请求的自定义请求头
      }
    };

    // 根据请求方法决定参数位置
    if (method.toUpperCase() === 'GET') {
      // 对于GET请求，将参数添加到URL查询字符串中
      if (data && typeof data === 'object' && Object.keys(data).length > 0) {
        // 检查是否使用了params参数包装
        const params = data.params || data;
        console.log('GET请求参数:', params);
        
        // 构造查询字符串
        const queryString = Object.keys(params)
          .filter(key => params[key] !== undefined && params[key] !== null)
          .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
          .join('&');
        
        // 将查询字符串附加到URL上
        if (queryString) {
          fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;
          console.log('完整请求URL:', fullUrl);
          requestConfig.url = fullUrl;
        }
      }
    } else {
      requestConfig.data = data;
    }

    // 从本地存储获取 token 并添加到请求头
    const token = uni.getStorageSync('token');
    if (token) {
      requestConfig.header.Token = `${token}`// 简化字符串拼接（无需 ${}）
    }

    return new Promise((resolve, reject) => {
      // 显示加载提示
      if (config.showLoading !== false) {
        uni.showLoading({
          title: '数据加载中!'
        })
      }

      // 发起 uni-app 原生请求
      const requestTask = uni.request({
        ...requestConfig,
        success: async (response) => {
          console.log('请求成功，响应状态码:', response.statusCode);
          console.log('响应数据:', response.data);
          // 处理不同的响应状态码
          if (response.statusCode >= 200 && response.statusCode < 300) {
            // 正常响应
            resolve(response.data);
          } else if (response.statusCode === 401) {
            // 未授权，清除本地token并跳转到登录页
            uni.removeStorageSync('token');
            uni.redirectTo({
              url: '/pages/login/phoneLogin'
            });
            reject({
              code: 401,
              message: '登录已过期，请重新登录'
            });
          } else {
            // 其他错误
            reject({
              code: response.statusCode,
              message: '请求失败',
              data: response.data
            });
          }
        },
        fail: (error) => {
          console.error('请求失败:', error);
          // 统一错误格式
          reject({
            code: 'NETWORK_ERROR',
            message: '网络请求失败',
            error
          });
        },
        complete() {
          // 延迟 1 秒隐藏加载提示（避免闪烁）
          if (config.showLoading !== false) {
            setTimeout(() => {
              uni.hideLoading();
            }, 1000);
          }
        }
      });
    });
  }
  
  // GET 请求快捷方法
  get(url, params = {}, config = {}) {
    return this.request('GET', url, params, config);
  }

  // POST 请求快捷方法
  post(url, data = {}, config = {}) {
    return this.request('POST', url, data, config);
  }

}


// 接口基础地址（根据环境注释切换）
// export const baseUrl = 'https://xsgl.hbhgkj.edu.cn/api/webApp'
// export const baseUrl = 'https://hkqnyd.hbhgkj.edu.cn/api/mini'
export const baseUrl = 'http://172.18.1.175:9093/api/mini'
// export const baseUrl = 'http://172.31.68.47:9089/api/webApp'
// export const baseUrl = 'http://121.40.136.253:9089/api/webApp' // 修正：原地址多了一个点

// 创建 HttpRequest 实例并导出
const http = new HttpRequest({
  baseUrl,
});
export default http;// 修正：原语法错误（dafault → default）